package mi.payment.utils.transaction;

import android.content.Context;

import java.util.HashMap;
import java.util.Map;

import mi.payment.settings.QPSParamsSetting;
import mi.payment.settings.QPSParamsOperation;
import mi.payment.utils.MoneyUtils;
import mi.payment.utils.iso8583.MsgField;
import mi.payment.utils.iso8583.TLVUtils;
import sunmi.sunmiui.utils.LogUtil;

/**
 * Created by sopurse on 2017/6/7.
 */

public class QpsDownloadTask extends TransactionTask<Void, Void, String> {

    private static final String TAG = "SMT-"+"QpsDownloadTask";

    protected QpsDownloadTask(Context c) {
        super(c, false);
    }

    @Override
    protected void onBegin(Void[] params) {

    }

    @Override
    protected String appointResult() {
        return "00";
    }

    @Override
    protected Map<String, MsgField> preAssembly() {
        return null;
    }

    @Override
    protected byte[] changeAndAssembly(Map<String, MsgField> fieldMap) {
        return null;
    }

    @Override
    protected String doTransactionSelf() {
//        this.setNeedAuthorization(false);
//        LogUtil.e(TAG, "QpsDownloadTask-doTransactionSelf");
//
//        resultStr = "FF";
//        ParamsDownloadTask qpsDownloadTask = new ParamsDownloadTask(context);
//        DownloadFinishedTask qpsDownloadFinishedTask = new DownloadFinishedTask(context);
//
//        // 下载非接业务参数并保存
//        String ret;
//        String tempStr = "";
//        String[] paramsDownload = new String[]{"396", tempStr};
//        ret = qpsDownloadTask.syncExecute(paramsDownload);
//        resultStr = ret;
//        LogUtil.e(TAG, "resultStr="+resultStr);
//
//        String hexResultStr = Utils.hexStr2AsciiStr(resultStr);
//        LogUtil.e(TAG, "hexResultStr="+hexResultStr);
//        parseQpsData(hexResultStr);
//
//        // 下载结束
//        ret = qpsDownloadFinishedTask.syncExecute("397", "0800");
//        resultStr = ret;
//        LogUtil.e(TAG, "resultStr="+resultStr);
//        return resultStr;
        return "00";
    }

    /**
     * 解析非接业务参数数据。——for非接业务参数下载交易。Tag为3字节（eg:FF8055）,Len为非标准（eg:003）
     * 非标准TLV格式, Len为非标准（eg:003代表长度3；012代表长度12，不是长度18。）
     */
    public static void parseQpsData(String hexString) {

        int position = 0;
        while (position < hexString.length()) {
            String tag = TLVUtils.getTag1(hexString, position);
            if (tag.equals("00")) {
                break;
            }
            position += tag.length();

            String hexLength = hexString.substring(position, position + 3);

            int len = Integer.valueOf(hexLength);   //Len为非标准（eg:003代表长度3；012代表长度12，不是长度18。）
            position = position + 3;

            String value = hexString.substring(position, position + len);
            position = position + value.length();
            LogUtil.e(TAG, "Tag=" + tag + ", Len=" + len + ", Value=" + value);

            Map<String,Integer> map=new HashMap<String, Integer>();
            map.put("FF803A", 1);
            map.put("FF803C", 2);
            map.put("FF8054", 3);
            map.put("FF8055", 4);
            map.put("FF8056", 5);
            map.put("FF8057", 6);
            map.put("FF8058", 7);
            map.put("FF8059", 8);
            map.put("FF805A", 9);
            map.put("FF805D", 10);
            map.put("FF810C", 11);
            switch(map.get(tag))
            {
            case 1:	//闪卡当笔重刷处理时间 N3 默认值10秒—— map.put("FF803A", 1);
                LogUtil.e(TAG, "FF803A");
                QPSParamsOperation.getInstance().saveQpsParamFF803A(Integer.valueOf(value));
                break;
            case 2:	//闪卡记录可处理时间 N3 默认值60秒——map.put("FF803C", 2);
                LogUtil.e(TAG, "FF803C");
                QPSParamsOperation.getInstance().saveQpsParamFF803C(Integer.valueOf(value));
                break;
            case 3:	//非接快速业务标识 N1 终端使用此数据元作为是否开启非接快速功能的判断条件。1-启用;0-关闭
                LogUtil.e(TAG, "FF8054NeedNoPswId");
                if(value.equals("1")){
                    QPSParamsOperation.getInstance().saveQpsParamNeedNoPswId(true);
                }else{
                    QPSParamsOperation.getInstance().saveQpsParamNeedNoPswId(false);
                }
                break;
            case 4:	//BIN表A标识 N1
                LogUtil.e(TAG, "FF8055BinAId");
                if(value.equals("1")){
                    QPSParamsOperation.getInstance().saveQpsParamBinAId(true);
                }else{
                    QPSParamsOperation.getInstance().saveQpsParamBinAId(false);
                }
                break;
            case 5:	//BIN表B标识 N1——map.put("FF8056", 5);
                LogUtil.e(TAG, "FF8056BinBId");
                if(value.equals("1")){
                    QPSParamsOperation.getInstance().saveQpsParamBinBId(true);
                }else{
                    QPSParamsOperation.getInstance().saveQpsParamBinBId(false);
                }
                break;
            case 6:	//CDCVM标识 N1 终端使用此数据元作为是否将卡片CDCVM执行情况作为免密的判断条件。1-启用;0-关闭——map.put("FF8057", 6);
                LogUtil.e(TAG, "FF8057CDCVMId");
                if(value.equals("1")){
                    QPSParamsOperation.getInstance().saveQpsParamCDCVMId(true);
                }else{
                    QPSParamsOperation.getInstance().saveQpsParamCDCVMId(false);
                }
                break;
            case 7:	//非接快速业务（QPS）免密限额 N12 终端使用此数据元作为条件之一判断非接联机交易是否请求持卡人验证方法，默认值300元，精确至小数点后两位
                //map.put("FF8058", 7);
                LogUtil.e(TAG, "FF8058NeedNoPswLimit");
                QPSParamsOperation.getInstance().saveQpsParamNeedNoPswLimit(Integer.valueOf(value));
                break;
            case 8:	//免签限额 N12 终端使用此数据元作为判断交易凭证是否需要进行免签处理,默认值为300元，精确至小数点后两位——map.put("FF8059", 8);
                LogUtil.e(TAG, "FF8059NeedNoSignLimit");
                QPSParamsOperation.getInstance().saveQpsParamNeedNoSignLimit(Integer.valueOf(value));
                break;
            case 9:	//免签标识 N1 终端使用此数据元作为是否支持交易凭证免签处理的判断条件 1， 启用;0，关闭——map.put("FF805A", 9);
                LogUtil.e(TAG, "FF805ANeedNoSignId");
                if(value.equals("1")){
                    QPSParamsOperation.getInstance().saveQpsParamNeedNoSignId(true);
                }else{
                    QPSParamsOperation.getInstance().saveQpsParamNeedNoSignId(false);
                }
                break;
            case 10:	//非接交易通道开关 N1 0-优先联机借贷记;1-优先电子现金——map.put("FF805D", 10);
                LogUtil.e(TAG, "FF805DQpsTubeId");
                if(value.equals("1")){
                    QPSParamsOperation.getInstance().saveQpsParamQpsTubeId(true);
                }else{
                    QPSParamsOperation.getInstance().saveQpsParamQpsTubeId(false);
                }
                break;
            case 11:
                LogUtil.e(TAG, "FF810C");
                break;
            }
        }
        QPSParamsSetting qpsParamsSetting = QPSParamsOperation.getInstance().getQPSParamsSettings();

        qpsParamsSetting.getQpsParamFF803A();
        LogUtil.e(TAG, "getQpsParamFF803A="+qpsParamsSetting.getQpsParamFF803A());

        qpsParamsSetting.getQpsParamFF803C();
        LogUtil.e(TAG, "getQpsParamFF803C="+qpsParamsSetting.getQpsParamFF803C());

        MoneyUtils.longCent2DoubleMoneyStr(qpsParamsSetting.getQpsParamNeedNoPswLimit());
        LogUtil.e(TAG, "getQpsParamNeedNoPswLimit="+ MoneyUtils.longCent2DoubleMoneyStr(qpsParamsSetting.getQpsParamNeedNoPswLimit()));

    }

}
